package ch7;

/**
 * @author ANG.YU
 * @date 2020-08-11 21:36
 */
public class Music {
    public static void tune(Instrument i) {
        // ...
        i.play(Note.middleC);
    }

    public static void main(String[] args) {
        Wind flute = new Wind();
        tune(flute); // Upcasting
    }
}

class Note {
    public static final Note
            middleC = new Note(0),
            cSharp = new Note(1),
            cFlat = new Note(2);
    private int value;

    private Note(int val) {
        value = val;
    }
} // Etc.

class Instrument {
    public void play(Note n) {
        System.out.println("Instrument.play()");
    }
}

// Wind objects are instruments
// because they have the same interface:
class Wind extends Instrument {
    // Redefine interface method:
    @Override
    public void play(Note n) {
        System.out.println("Wind.play()");
    }
}
